// DataLibrary InterfacePlugin - Common

// 識別子：DL_CMN
// 内容  ：インターフェース共有サブルーチン。

//----------------------------------------------------------------------------//
// Plugin
//----------------------------------------------------------------------------//

//-- プラグインの読み込み処理 --//
DL_LoadInterface_Common:
	// ライブラリの読み込み処理を優先度9で起動処理に登録する
	Call DL_RegisterStartup "DL_CMN_Startup" 9
Return


//-- プラグインの終了処理 --//
DL_UnLoadInterface_Common:
	ClearObj
	UnSet DL_CMN_ActionID
	UnSet DL_CMN_ShortcutKeyList
	UnSet DL_CMN_ShortcutKey
	UnSet DL_CMN_PushKey
Return


//-- 起動処理 --//
DL_CMN_Startup:
	// コンフィグを登録する
	Call DL_CFG_SetConfigData "CMN1" "CMN_CAPTION" "OnOff" DL_GetOptionValue("Caption", 1) _
		"ホットポイント解説の設定" _
		"マウスカーソルを合わせた時に表示される;ホットポイントの解説の有無を設定します。"
Return


//----------------------------------------------------------------------------//
// CommonInterface
//----------------------------------------------------------------------------//

//-- WaitAction : 選択結果が出るまで待機します --//
DL_CMN_WaitAction:
	// 画面を更新する
	Refresh
	
	// マウスボタンが解除されるまで待機する
	Call DL_CMN_WaitReleaseKey
	
	// 選択結果を初期化する
	Set DL_CMN_ActionID ""
	Set DL_CMN_PushKey 1
	
	// 選択されるまで待機する
	Do
		Wait Click
		If KeyState(1) Then
			Set DL_CMN_ActionID 選択  // 左クリックの場合のみ選択を格納する
		EndIf
		Call DL_CMN_SearchShortcutKey
	Loop While (DL_CMN_ActionID = "")
Return


//-- QuitMessage : 終了メッセージを表示する --//
DL_CMN_QuitMessage:
	If DL_GetOptionValue("QuitMessage", 0) = 0 Then
		Return 1
	EndIf
	
	Confirm (DL_MainTitle & "を終了しますか？")
	Wait 0  // Confirmを消す
Return 選択


//-- HotPoint action_id x y w h [caption] : ホットポイントを設定する --//
DL_CMN_HotPoint:
	Local value = DL_GetConfigValue("CMN_CAPTION", DL_GetOptionValue("Caption", 1))
	If value = 0 Then
		HotPoint Args(1) Args(2) Args(3) Args(4) Args(5) "非表示"
	Else
		HotPoint Args(1) Args(2) Args(3) Args(4) Args(5) Args(6)
	EndIf
Return


//----------------------------------------------------------------------------//
// Action
//----------------------------------------------------------------------------//

//-- QuitAction aciton_id tag : 終了確認に関する処理を行う --//
DL_CMN_QuitAction:
	Local action_id = Args(1)
	Local skin_routine = "DL_" & Args(2) & "_SkinAction"
	
	// クリック時の処理を実行する
	Call ("DL_PlaySound_" & IIf(action_id = "Cancel", "Cancel", "Click"))
	Call skin_routine "SelectQuit" action_id
	
	// 終了確認を行う
	If DL_CMN_QuitMessage() Then
		Set DL_ShowGUI ""  // DataLibraryを終了する
	
		// サブインターフェース呼び出しを終了する
		If IsVarDefined(DL_CMN_SubGUI) Then
			Set DL_CMN_SubGUI ""
		EndIf
		Return 0
	EndIf
	
	// キャンセルされた場合は再描画指示を出す
	Call skin_routine "CancelQuit" action_id
Return 1


//-- IndexAction action_id tag : インデックスに直帰する処理を行う --//
DL_CMN_IndexAction:
	Local aciton_id = Args(1)
	Local skin_routine = "DL_" & Args(2) & "_SkinAction"
	
	// クリック時の処理を実行する
	Call DL_PlaySound_Click
	Call skin_routine "SelectIndex" action_id
	
	// インデックスに戻る
	Set DL_ShowGUI "Index"
	
	// サブインターフェース呼び出しを終了する
	If IsVarDefined(DL_CMN_SubGUI) Then
		Set DL_CMN_SubGUI ""
	EndIf
Return


//-- ReturnAction action_id tag interface : 戻る処理を行う --//
DL_CMN_ReturnAction:
	Local action_id = Args(1)
	Local skin_routine = "DL_" & Args(2) & "_SkinAction"
	Local interface = Args(3)
	
	// クリック時の処理を実行する
	Call ("DL_PlaySound_" & IIf(action_id = "Cancel", "Cancel", "Click"))
	Call skin_routine "SelectReturn" action_id
	
	// サブインターフェース呼び出しを終了する
	If IsVarDefined(DL_CMN_SubGUI) Then
		Set DL_CMN_SubGUI ""
		Return 0
	EndIf
	
	// シングルモードの場合は終了確認を行う
	If IsVarDefined(DL_SingleMode) And (Not DL_ShowLib Like "*_*") _
			And (DL_ShowGUI = DL_GetLibInterface(DL_ShowLib)) Then
		If DL_CMN_QuitMessage() Then
			Set DL_ShowGUI ""  // DataLibraryを終了する
			Return 0
		Else
			Call skin_routine "CancelQuit" action_id
			Return 1
		EndIf
	EndIf
	
	// 戻るインターフェースを設定する
	Set DL_ShowGUI interface
Return 0


//-- SubInterfaceAction action_id tag [option] : サブインターフェースの処理を行う --//
DL_CMN_SubInterfaceAction:
 	Local action_id = Args(1)
	Local skin_routine = "DL_" & Args(2) & "_SkinAction"
	
	// クリック時の処理を実行する
	Call DL_PlaySound_Click
	Call skin_routine ("Select" & action_id) action_id
	
	If IsVarDefined(DL_CMN_SubGUI) Then
		Return 0  // サブインターフェース内から呼び出された場合は無視する
	EndIf
	
	// サブインターフェースを呼び出す
	Local show_gui = DL_ShowGUI
	Set DL_CMN_SubGUI action_id
	Call skin_routine "StartSubInterface" action_id
	Do
		Call ("DL_GUI_" & DL_CMN_SubGUI)
	Loop While (DL_CMN_SubGUI != "")
	UnSet DL_CMN_SubGUI
	
	// 終了、インデックス直帰の場合は0を返す
	If (DL_ShowGUI = "") Or ((show_gui != "Index") And (DL_ShowGUI = "Index")) Then
		Return 0
	EndIf
	
	If Args(3) = "Cancel" Then
		Return 1
	EndIf
	
	// サブインターフェース終了処理を呼び出す
	Call skin_routine "EndSubInterface" action_id
Return 1


//-- ScrollAction action_id tag : スクロール処理を行う --//
DL_CMN_ScrollAction:
	Local action_id = Args(1)
	Local skin_routine = "DL_" & Args(2) & "_SkinAction"
	Local id = LIndex(action_id, 2)
	Local change_pos = LIndex(action_id, 3)
	Local now_pos = DL_GetScrollData(id, "NowPos")
	
	// クリック時の処理を行う
	If (change_pos != "Input") And (DL_GetScrollData(id, "Mode") Like "Page*") Then
		Call DL_PlaySound_Page
	Else
		Call DL_PlaySound_Click
	EndIf
	Call skin_routine "SelectScroll" action_id
	
	// スクロール処理を行う
	Call DL_ChangeScrollPos id change_pos
	
	// 画面にスクロール結果を反映する
	If now_pos = DL_GetScrollData(id, "NowPos") Then
		Call skin_routine "CancelScroll" action_id
	Else
		Call skin_routine "RedrawScroll" action_id
	EndIf
Return 1


//-- NotDefinedAction : 未設定動作を処理する --//
DL_CMN_NotDefinedAction:
	Local action_id = Args(1)
	Local skin_routine = "DL_" & Args(2) & "_SkinAction"
	
	// クリック時の処理を行う
	Call DL_PlaySound_Click
	Call skin_routine ("Select" & LIndex(action_id, 1)) action_id
Return 1


//----------------------------------------------------------------------------//
// ShortcutKey
//----------------------------------------------------------------------------//

//-- ClearShortcutKey [key] : ショートカットキーをすべて消去する --//
DL_CMN_ClearShortcutKey:
	If ArgNum > 0 Then
		Local i
		For i = 1 To ArgNum
			Set DL_CMN_ShortcutKeyList RegExpReplace(DL_CMN_ShortcutKeyList, "\s*\b" & Args(i) & "\b", "")
			UnSet DL_CMN_ShortcutKey[Args(i)]
		Next
	Else
		UnSet DL_CMN_ShortcutKeyList
		UnSet DL_CMN_ShortcutKey
	EndIf
Return


//-- SetShortcutKey key action_id : ショートカットキーを設定する --//
DL_CMN_SetShortcutKey:
	If LSearch(DL_CMN_ShortcutKeyList, Args(1)) = 0 Then
		If Not IsVarDefined(DL_CMN_ShortcutKeyList) Then
			Set DL_CMN_ShortcutKeyList ""
		EndIf
		Set DL_CMN_ShortcutKeyList List(DL_CMN_ShortcutKeyList, Args(1))
	EndIf
	Set DL_CMN_ShortcutKey[Args(1)] Args(2)
Return


//-- SearchShortcutKey : ショートカットキーを検索する --//
DL_CMN_SearchShortcutKey:
	Local key i
	For i = 1 To LLength(DL_CMN_ShortcutKeyList)
		key = LIndex(DL_CMN_ShortcutKeyList, i)
		If KeyState(key) Then
			Set DL_CMN_ActionID DL_CMN_ShortcutKey[key]
			Set DL_CMN_PushKey key
			Return
		EndIf
	Next
Return


//-- WaitReleaseKey : キーが離されるまで待機する --//
DL_CMN_WaitReleaseKey:
	If DL_CMN_ActionID != "Cancel" Then
		Return
	EndIf
	Do While KeyState(DL_CMN_PushKey)
		Wait 0
	Loop
Return


